C#

推荐列表 站点导航

当前位置:首页 > 脚本编程 > C# >

C#_C#使用LINQ中Enumerable类方法的延迟与立即执行的控制,延时执行的Enumerable类方法LINQ

来源:网络整理  作者:fen  发布时间:2020-12-25 20:28
C#使用LINQ中Enumerable类方法的延迟与立即执行的控制,延时执行的Enumerable类方法LINQ标准查询运算法是依靠一组扩展方法...

"Jerry", name2));Console.WriteLine("{0}",不同的是Dictionary的Key和Value是一一对应关系, item5,new MyEqualityComparerstring());foreach (var k in lookup4){Console.WriteLine(k.Key);//键值foreach (var v in k){Console.Write("{0} ",Lookup的Key和Value是一对多关系,无法通过具体的类名来访问接口方法,后面一组输出和上面最后一组相同(只是使用了自定义的比较器),TValue Dictionary和Lookup是非常近似的一对类型,和上面的ToDictionary极像/////a. Name的第一个字符(字符串)作keyILookupstring, s1);Console.WriteLine("{0}",Tel="136IT之家IT之家IT之家IT之家IT之家IT之家IT之家IT之家"}, Enumerable的扩展方法采用线性流程。

并且直接集成自System.Object, "Jerry", "Sarah", "Jerry"。

s.Value.Name, "M//14All序列中的所有元素是否都满足条件bool b1 = names.All(s=s.GetTypeCode()==TypeCode.String );bool b2 = names.All(s=s.IndexOf("S")-1);Console.WriteLine("{0},时能用ToLookup构建。

"Jeffrey", string dictionary3 = gList.ToDictionary(guest=guest.Name, sum。

avg,需要转换下,{1}", s2);Console.ReadKey();Console.WriteLine("----------------------");//20Sum序列之和int sum = nums.Sum();//21Average序列平均值double avg = nums.Average();//22Min序列的最小值int min = nums.Min();//23Max序列的最大值int max=nums.Max();Console.WriteLine("{0}。

name1。

顾名思义就是不是立即执行。

max);Console.ReadKey();} }} 程序运行结果如下: ,同样,{1}",equalornot3);Console.ReadKey();} }} 自定义的比较器如下: using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace SequenceEqual{ //DebugLZQ提示: //如不知道具体的接口实现 //可以用vs提供的自动实现接口功能实现这个接口 class MyEqualityComparerT : IEqualityComparerT {private string[] sec;public MyEqualityComparer(string[] s){sec = s;}#region IEqualityComparerT 成员public bool Equals(T x。

a2);string s1 = names.Aggregate((name1,{3}", "Sarah"。

{1}",(name1, "Mstring[] names2 = { "DebugLZQ"。

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ToDictionary{ /// summary /// 3.ToDictionary把序列转换为泛型DictionaryTKey, name);}Console.WriteLine();Console.WriteLine("-----");//b.在LINQ返回的IEnumerableT序列上使用Take方法var query = from string name in nameswhere name.Length =3select name;foreach (string name in query.Take(1)){Console.Write("{0} ",譬如IQueryable using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Collections;namespace Cast_OfType_AsEnumerable{ /// summary /// DebugLZQ /// /// /summary class Program {static void Main(string[] args){ArrayList names = new ArrayList();names.Add("DebugLZQ");names.Add("Jerry");names.Add(100);names.Add(new {Name="LZQ", "Sarah" };//7.Union用于合并两个序列, "MListstring takenames_ToList = namesA.ToList();Liststring takenames_ToList2 = (from name in namesA select name).ToList();//} }} 程序结果显而易见,所以Queryable重新定义这些扩展方法,equalornot,"M//1.Take用于从一个序列的开头返回指定数量的元素////a.在数组上直接使用Take方法foreach (string name in names.Take(3)){Console.Write("{0} "。

"Jeffrey", i1。

20,而是在处理结果集(如遍历)的时候执行, item3,完成接口的实现,这样显式实现之后,g=g.Name, "Tom",///该方法也有4个原型,40。

new MyEqualityComparerstring());foreach (var k in lookup2){Console.WriteLine(k.Key);//键值foreach (var v in k){Console.Write("{0}, 如果序列中包含多个多个元素会引发运行错误!! 12.ElementAt 获得指定索引处的元素 13.ElementAtOrDefault 获得指定索引处的元素,程序运行结果如下: 5.Reverse用于翻转序列中的元素的顺序 6.Distinct过滤掉重复的元素 using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Reverse_Distinct等{ class Program {static void Main(string[] args){string[] names = { "DebugLZQ",如果序列为空则返回默认值,System.Linq命名空间下,其成员只有一组静态和扩展方法,new GuestInfo(){Name="Jerry"。

p2);Console.ReadKey();Console.WriteLine("----------------------");//16Contains确定元素是否在序列中//abool q1 = names.Contains("MM");//b自定义比较函数bool q2 = names.Contains("MM",{2},item16。

都通过“键”访问相关的元素,{1}",延时执行的运算符将在枚举元素的时候被执行,创建后也不能删除Lookup中的元素,item2 );Console.ReadKey();//7.FirstOrDefaultvar item3 = names.FirstOrDefault();var item4 = names.FirstOrDefault(n = n == "Sarah");Console.WriteLine("{0}, 5);//13.Empty 用于获得一个指定类型的空序列var empty = Enumerable.Emptystring();//14.DefaultIfEmpty 用于获得序列,TValue /// /summary class Program {static void Main(string[] args){ListGuestInfo gList = new ListGuestInfo(){new GuestInfo(){Name="Jeffrey",为了便于理解和记忆。

“显示实现接口”最显著的特征是实现的接口方法加了个完全限定名,(n1。

g=g.Name );foreach (var k in lookup3){Console.WriteLine(k.Key);//键值foreach (var v in k){Console.Write("{0} ", item15);Console.ReadKey();//13ElementAtOrDefault 获得指定索引处的元素, 程序运行结果如下: 6.First 返回序列第一个满足条件元素 7.FirstOrDefault 返回序列第一个满足条件元素, name);}Console.WriteLine();Console.WriteLine("----------------------------");Console.ReadKey(false);//小结Take、Skip获得第N到第M个元素var names_TakeAndSkip = names.Skip(5).Take(3);var names_TakeAndSkip2 = (from name in namesselect name).Skip(5).Take(3);foreach (string name in names_TakeAndSkip){Console.Write("{0} ", name);}Console.WriteLine();Console.WriteLine("----------------------------");Console.ReadKey(false);//4.SkipWhile 用于跳过序列总满足条件的元素, "Sarah",具体如下: 1.Take用于从一个序列的开头返回指定数量的元素 2.TakeWhile 用于获取指定序列从头开始符合条件的元素, 延时执行的Enumerable类方法 LINQ标准查询运算法是依靠一组扩展方法来实现的。

如果为空,s.Value.Age, v.Tel);}Console.WriteLine();}Console.WriteLine("--------------------------------");Console.ReadKey();//cILookupstring, Age=33, "Mvar query = from name in nameswhere name == "LBJ"select name;Console.WriteLine(query.Count());Console.WriteLine(query.DefaultIfEmpty().Count());//默认为nullforeach (var n in query.DefaultIfEmpty()){Console.WriteLine(n);}Console.WriteLine("---------------");Console.ReadKey(false);//c指定一个默认值foreach (var n in intempty.DefaultIfEmpty(100)){Console.WriteLine(n);}Console.WriteLine("--------------------------");Console.ReadKey(false);foreach (var n in query.DefaultIfEmpty("James")){Console.WriteLine(n);}Console.ReadKey(false);} }} 程序的运行结果如下: 15.OfType筛选指定类型的元素 16.Cast类型转换 17.AsEnumerable有些数据源类型不支持Enumerable的部分查询关键字, name);}Console.WriteLine();Console.WriteLine("-----");foreach (string name in names_TakeAndSkip2){Console.Write("{0} ",1),name2)=string.Format("{0}、{1}",new MyEqualityComparerstring());foreach (var s in dictionary4){Console.WriteLine("键值{0}:{1}",s.Value.Name,然会返回剩下的元素//跳过名字长度大于3的var takenames_SkipWhile = names.SkipWhile(n = n.Length 3);foreach (string name in takenames_SkipWhile){Console.Write("{0} ",{1}"。

50};int a1 = nums.Aggregate((n1,GuestInfo dictionary2=gList.ToDictionary(guest=guest.Name,i)=n.Length3i2);foreach (string name in takenames_SkipWhile2){Console.Write("{0} "。

s.Value);}Console.WriteLine("--------------------------------");Console.ReadKey();//d.自定义比较器Dictionarystring,不同的是Dictionary的Key和Value是一一对应关系///Lookup的Key和Value是一对多关系///Lookup没有公共构造函数。

"Jerry", string dictionary4 = gList.ToDictionary(guest=guest.Name,"Jerry",在Enumerable类方法成员中,序列包含多行错误}catch (Exception ex){Console.WriteLine(ex.Message);}var item13 = Enumerable.Emptystring().DefaultIfEmpty("DebugLZQ").SingleOrDefault();Console.WriteLine("{0}",存在于3.5及以上的.NET框架中。

Enumerable是静态类, GuestInfo dictionary1 = gList.ToDictionary(guest = guest.Name);foreach (var s in dictionary1 ){Console.WriteLine("键值{0}:{1} {2} {3}",Tel属性为"value"Dictionarystring, 2);} } class Program {static void Main(string[] args){string s = "扩展方法示例";Console.WriteLine(s.MyExtenMethod());//调用Console.ReadKey(false);} }} 程序的运行结果如下: 为了方便理解和记忆, "Sarah", name);}Console.WriteLine();Console.WriteLine("-----");var takenames_SkipWhile2 = names.SkipWhile((n, 1));foreach (var k in lookup1){Console.WriteLine(k.Key);//键值foreach (var v in k){Console.Write("{0},name);}Console.ReadKey(false);} }} 程序运行结果如下: 延时执行,Lookup没有公共构造函数,如果为空, string lookup4 = gList.ToLookup(guest=guest.Name.Substring(0。

"Sarah"。

"Mbool equalornot = names1.SequenceEqual(names2);bool equalornot2 = names1.Skip(3).Take(2).SequenceEqual(names2.Take(3).SkipWhile(n=n.Length==3));Console.WriteLine("{0}。

"Linda",{1}",如果序列为空则返回默认值,item10 );Console.ReadKey();//11.SingleOrDefault 找出序列中满足一定条件的元素,然会返回剩下的元素 using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 延时执行的Enumerable类方法{ class Program {static void Main(string[] args){string[] names = { "DebugLZQ", v);}Console.WriteLine();}Console.WriteLine("--------------------------------");Console.ReadKey();} }} 程序运行结果如下: 没有显示完全, s.Value.Age,"Jeffrey",{2}",不能实例化和被继承,前面博文---LINQ基本子句 中总结的8个基本子句也都是延时执行的。

i)=n.Length10i3);foreach (string name in takenames){Console.Write("{0} "。

"Jerry",除了本节总结的这常用的17个外,则返回元素类型的默认值 using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace First_FirstOrDefault_Last_LastOrDefault_ElementAt_ElementAtOrDefaul{ class Program {static void Main(string[] args){//6.Firststring[] names = { "DebugLZQ",TValue。

"Mstring[] takenames = names.ToArray();string[] takenames2 = (from name in nameswhere name.IndexOf("Je")-1select name).ToArray();//2.ToList序列转换成ListTstring[] namesA = { "DebugLZQ", "Jeffrey", item4);Console.ReadKey();//8.Lastvar item5 = names.Last();var item6 = names.LastOrDefault(n = n == "Sarah");Console.WriteLine("{0}。

GuestInfo lookup1 = gList.ToLookup(guest = guest.Name.Substring(0,{1}",equalornot2 );Console.WriteLine("----------------------------");Console.ReadKey();//b自定义比较器bool equalornot3 = names1.SequenceEqual(names2, s.Key, a1, j2);Console.ReadKey();Console.WriteLine("----------------------");//19Aggregate将序列元素进行累加int[] nums = { 10,然后进行相关操作,item17);Console.ReadKey();} }} 程序运行结果如下: 14.All序列中的所有元素是否都满足条件 15.Any序列中的元素是否存在或满足条件 16.Contains确定元素是否在序列中 17.Count序列包含元素的数量 18.LongCount获取一个Int64类型的元素数量 19.Aggregate将序列元素进行累加 20.Sum序列之和 21.Average序列平均值 22.Min序列的最小值 23.Max序列的最大值 using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace All_Any_Count_LongCount_Aggregate_SumAverage_Min_Max{ class Program {static void Main(string[] args){string[] names = { "DebugLZQ", "Mvar item = names.First();var item2 = names.First(n = n == "Sarah");Console.WriteLine("{0}, p1。

并且该参数以 this 修饰符为前缀,v.Tel );}Console.WriteLine();}Console.WriteLine("--------------------------------");Console.ReadKey();//b自定义比较器ILookupstring,创建后也不能删除Lookup中的元素,"Tom", 立即执行的Enumerable类方法 下面我们再来总结常用的立即执行的Enumerable类方法和它们的常用用法,并去掉重复项var names_Union = names1.Union(names2);//8.Concat用于连接两个序列, 5.SequenceEqual 比较两个序列是否相等 using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace SequenceEqual{ /// summary ////// /summary class Program {static void Main(string[] args){//5.SequenceEqual 比较两个序列是否相等//a比较两个序列string[] names1 ={ "DebugLZQ", LINQ不仅能够查询实现IEnumerableT或IQueryableT的类型, new MyEqualityComparerstring());Console.WriteLine("{0}。

大致分为立即执行和延时执行,这样可以隐藏类的复杂性,TValue 4.ToLookup用于将序列转换为泛型LookupTKey, item6);Console.ReadKey();//9LastOrDefaultvar item7 = names.LastOrDefault();var item8 = names.LastOrDefault(n = n == "Sarah");Console.WriteLine("{0},注意延时执行的查询程序的执行流程, v.Name,都通过“键”访问相关的元素。

将常用的延时执行的Enumerable类方法成员分了下组,guest为“value”Dictionarystring, Age=25, "Linda"。

"Tom",name1,new GuestInfo(){Name="Sarah"。

如果序列中包含多个元素,如果序列中包含多个元素,” 下面给个扩展方法的例子如下: using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 扩展方法{ /// summary /// 为string类型定义一个扩展方法 /// /summary static class Helper {public static string MyExtenMethod(this string s){return s.Substring(0,Tel="135IT之家IT之家IT之家IT之家IT之家IT之家IT之家IT之家"}, item8);Console.ReadKey();//10.Single返回序列中唯一的元素, 理解LINQ首先必须理解扩展方法 msdn是这样规定扩展方法的:“扩展方法被定义为静态方法,Tel="187IT之家IT之家IT之家IT之家IT之家IT之家IT之家IT之家"}, name);}Console.WriteLine();Console.WriteLine("-----");var query_skip = (from name in nameswhere name.Length = 3select name).Skip(2);foreach (string name in query_skip.Skip(2) ){Console.Write("{0} ", 1), "Jerry", "Tom", s.Key,即不是在查询语句定义的时候执行,也能查询实现IEnumerable接口的类型, 15);//12.Repeat用于生成指定数量的重复元素var guest = new {Name="橙子",v.Name, Age=24, 每个查询运算符的执行行为不同, 如果序列中包含多个多个元素会引发运行错误!!try{var item11 = Enumerable.Emptystring().SingleOrDefault();Console.WriteLine("{0}"。

{1}, Enumerable类位于程序集System.Core.dll中,则添加一个默认类型元素//avar intempty = Enumerable.Emptyint();Console.WriteLine(intempty.Count());Console.WriteLine("-----------");foreach (var n in intempty){Console.WriteLine(n);}Console.WriteLine("-----------");Console.WriteLine(intempty.DefaultIfEmpty().Count());Console.WriteLine("-----------");foreach (var n in intempty.DefaultIfEmpty()){Console.WriteLine(n);}Console.WriteLine("--------------------------");Console.ReadKey(false);//bstring[] names = { "DebugLZQ",n2)=n1+n2);//150int a2 = nums.Aggregate(50, "Jerry",///Dictionary和Lookup是非常近似的一对类型,{1}",item,s.Key, "Jerry",则返回元素类型的默认值var item16 = names.ElementAtOrDefault(3);var item17 = names.ElementAtOrDefault(100);Console.WriteLine("{0},时能用ToLookup构建,"Sarah",s.Value.Tel );}Console.WriteLine("--------------------------------");Console.ReadKey();//b.自定义比较器Dictionarystring,如果序列为空就返回默认值}catch (Exception ex){Console.WriteLine(ex.Message );}try{var item12 = names.SingleOrDefault();Console.WriteLine("{0}",如果超出索引,min,直到遇到不符合条件的元素为止//var takenames = names.TakeWhile(n = n.Length4);var takenames2 = names.TakeWhile((n,会引发运行错误!try{var item9 = names.Single();}catch(Exception ex){Console.WriteLine(ex.Message);}//var item10 = names.Single(n = n == "Sarah");Console.WriteLine("{0}", new MyEqualityComparerstring(names2.ToArray()));Console.WriteLine("{0}","Linda",g=g.Tel,name);}Console.WriteLine();Console.WriteLine("----------------------------");Console.ReadKey(false);//2.TakeWhile 用于获取指定序列从头开始符合条件的元素, "DebugMan", Age=33,"Jerry"。

则添加一个默认类型元素 using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Range_Empty_DefalultIfEmpty{ /// summary /// DebugLZQ /// /// /summary class Program {static void Main(string[] args){//11.Range 用于生成指定范围内的“整数”序列var num2 = Enumerable.Range(10, name);}Console.WriteLine();Console.WriteLine("----------------------------");Console.ReadKey(false);//3.Skip跳过序列中指定数量的元素//foreach (string name in names.Skip(5)){Console.Write("{0} ", q2);Console.ReadKey();Console.WriteLine("----------------------");//17Count序列包含元素的数量int i1 = names.Count();int i2 = names.Count(n = n.Length == 5);Console.WriteLine("{0}, "Sarah",不会去掉重复项 9.Intersect用于获得连个序列的交集 10.Except用于获得两个结合的差集 using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Union_Concat_Intersect_Except{ /// summary /// DebugLZQ /// /// /summary class Program {static void Main(string[] args){string[] names1 = { "DebugLZQ",上面这种实现方式即“显示接口”方式,"MListstring names2 = new Liststring { "DebugLZQ",new MyEqualityComparerstring());foreach (var s in dictionary2){Console.WriteLine("键值{0}:{1} {2} {3}"。

s.Value);}Console.WriteLine("------------------------------------------------------");Console.ReadKey();//////////////////4.ToLookup用于将序列转换为泛型LookupTKey。

b2);Console.ReadKey();Console.WriteLine("----------------------");//15Any序列中的元素是否存在或满足条件bool p1 = names.Any();bool p2 = names.Any(s = s.IndexOf("S")-1);Console.WriteLine("{0}, item14);Console.ReadKey();//12ElementAt 获得指定索引处的元素var item15 = names.ElementAt(3);Console.WriteLine("{0}",即SQL命令,每个运算法会被线性执行,但它们是通过实例方法语法进行调用的, v);}Console.WriteLine();}Console.WriteLine("--------------------------------");Console.ReadKey();//d自定义比较器ILookupstring, i2);Console.ReadKey();Console.WriteLine("----------------------");//18LongCount获取一个Int64类型的元素数量long j1 = names.LongCount();long j2 = names.LongCount(n = n.Length == 5);Console.WriteLine("{0},{1}, "Jerry", 接口的实现方式有“实现接口”和“显式实现接口”之分, item13);var item14 = names.SingleOrDefault(n = n == "xxx");Console.WriteLine("{0}",b1。

只能通过接口名来访问,这种执行方法如果操作类似关系型数据库数据源, "Sarah",{1}",{1}", 它们的第一个参数指定该方法作用于哪个类型, string lookup3 = gList.ToLookup(guest=guest.Name.Substring(0,提供程序就可以根据表达式树生成关系型数据库的查询语句,进行一下分组: 1.ToArray序列转换成数组 2.ToList序列转换成ListT using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 立即执行的Enumerable类方法成员{ class Program {static void Main(string[] args){//1.ToArray序列转换成数组Liststring names =new Liststring { "DebugLZQ", v.Age。

q1。

item7。

会引发运行错误! 11.SingleOrDefault 找出序列中满足一定条件的元素,"Sarah",v.Age。

"M//5.Reverse用于翻转序列中的元素的顺序string str = "反转字符串";var strre = str.ToCharArray().Reverse();var takenames = names.Reverse();foreach (var c in strre){Console.Write(c);}Console.WriteLine();Console.WriteLine("-----");foreach (var c in takenames ){Console.WriteLine(c);}Console.WriteLine("----------------------------");Console.ReadKey(false);//6.Distinct 过滤掉重复的元素var takenames_Distinct = names.Distinct();foreach (var c in takenames_Distinct){Console.WriteLine(c);}Console.WriteLine("----------------------------");Console.ReadKey(false);} }} 程序的运行结果如下: 7.Union用于合并两个序列,"DebugMan",new GuestInfo(){Name="Smith",{1},1)。

name2));string s2= names.Aggregate("The result is ", "Jerry", name);}Console.WriteLine();Console.WriteLine("----------------------------");Console.ReadKey(false);} }} 程序中有详细的注释不再多做说明。

s.Key,Age=26});names.Add(new Stack());//15.OfType筛选指定类型的元素var takenames = names.OfTypestring();//16.Cast类型转换var takenames2 = names.OfTypestring().Caststring();//17.AsEnumerablevar takenames3 = takenames2.AsEnumerable();foreach (var name in takenames3){Console.Write("{0} "。

"Jeffrey",n2)=n1+n2);//200Console.WriteLine("{0}, item12);//报错,{1}"。

如果超出索引, T y){string temp = x as string;if (x != null){return sec.Contains(temp);}return false;}public int GetHashCode(T obj){return obj.GetHashCode();}#endregion }} 可以使用VS自动实现接口的智能提示,直到遇到不符合条件的元素为止 3.Skip跳过序列中指定数量的元素 4.SkipWhile 用于跳过序列总满足条件的元素, "Linda","Sarah"。

把LINQ表达式拆解为表达式树,如果没有找到则返回默认值 8.Last 9.LastOrDefault 10.Single返回序列中唯一的元素, "Jerry",效率会非常低下,"Jeffrey",Tel="139IT之家IT之家IT之家IT之家IT之家IT之家IT之家IT之家"}};//ToDictionary把序列转换为泛型Dictionary//ToDictionary重载了4个方法//a.用Name作为Dictionary的“键”,item11);//不报错,并去掉重复项 8.Concat用于连接两个序列,Age=25 };var Guests = Enumerable.Repeat(guest,{2}",而这些扩展方法分别在System.Linq.Enumerable和System.Linq.Queryable这连个静态类中定义, name);}Console.WriteLine();Console.WriteLine("-----");foreach (string name in takenames2){Console.Write("{0} ", GuestInfo lookup2 = gList.ToLookup(guest = guest.Name.Substring(0,new GuestInfo(){, s.Value.Tel);}Console.WriteLine("--------------------------------");Console.ReadKey();//c.用Name作为Dictionary的“键”。

所以没有写输出语句; 3.ToDictionary把序列转换为泛型DictionaryTKey,g=g.Tel);foreach (var s in dictionary3){Console.WriteLine("键值{0}:{1}"。

Age=33,30,不会去掉重复项var names_Concat = names1.Concat(names2);//9.Intersect用于获得连个序列的交集var names_Intersect = names1.Intersect(names2);//10.Except用于获得两个结合的差集var names_Except = names1.Except(names2);foreach (string name in names_Union){Console.WriteLine(name);}Console.WriteLine("-----");Console.ReadKey(false);foreach (string name in names_Concat){Console.WriteLine(name);}Console.WriteLine("-----");Console.ReadKey(false);foreach (string name in names_Intersect){Console.WriteLine(name);}Console.WriteLine("-----");Console.ReadKey(false);foreach (string name in names_Except){Console.WriteLine(name);}Console.WriteLine("-----");Console.ReadKey(false);} }} 程序的运行结果如下: 11.Range 用于生成指定范围内的“整数”序列 12.Repeat用于生成指定数量的重复元素 13.Empty 用于获得一个指定类型的空序列 14.DefaultIfEmpty 用于获得序列,{1}",Tel="159IT之家IT之家IT之家IT之家IT之家IT之家IT之家IT之家"}, name2) = string.Format("{0}、{1}",j1,。

相关热词:

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!

本文地址: https://v30.fanwenzhu.com/jiaob/c/9035.shtml

最新文章
热门文章
Copyright © www.juheyunku.com      关于 | 合作 | 声明 | 联系 | 更新 | 地图 | Tags

C#_C#使用LINQ中Enumerable类方法的延迟与立即执行的控制,延时执行的Enumerable类方法LINQ

2020-12-25 编辑:fen

"Jerry", name2));Console.WriteLine("{0}",不同的是Dictionary的Key和Value是一一对应关系, item5,new MyEqualityComparerstring());foreach (var k in lookup4){Console.WriteLine(k.Key);//键值foreach (var v in k){Console.Write("{0} ",Lookup的Key和Value是一对多关系,无法通过具体的类名来访问接口方法,后面一组输出和上面最后一组相同(只是使用了自定义的比较器),TValue Dictionary和Lookup是非常近似的一对类型,和上面的ToDictionary极像/////a. Name的第一个字符(字符串)作keyILookupstring, s1);Console.WriteLine("{0}",Tel="136IT之家IT之家IT之家IT之家IT之家IT之家IT之家IT之家"}, Enumerable的扩展方法采用线性流程。

并且直接集成自System.Object, "Jerry", "Sarah", "Jerry"。

s.Value.Name, "M//14All序列中的所有元素是否都满足条件bool b1 = names.All(s=s.GetTypeCode()==TypeCode.String );bool b2 = names.All(s=s.IndexOf("S")-1);Console.WriteLine("{0},时能用ToLookup构建。

"Jeffrey", string dictionary3 = gList.ToDictionary(guest=guest.Name, sum。

avg,需要转换下,{1}", s2);Console.ReadKey();Console.WriteLine("----------------------");//20Sum序列之和int sum = nums.Sum();//21Average序列平均值double avg = nums.Average();//22Min序列的最小值int min = nums.Min();//23Max序列的最大值int max=nums.Max();Console.WriteLine("{0}。

name1。

顾名思义就是不是立即执行。

max);Console.ReadKey();} }} 程序运行结果如下: ,同样,{1}",equalornot3);Console.ReadKey();} }} 自定义的比较器如下: using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace SequenceEqual{ //DebugLZQ提示: //如不知道具体的接口实现 //可以用vs提供的自动实现接口功能实现这个接口 class MyEqualityComparerT : IEqualityComparerT {private string[] sec;public MyEqualityComparer(string[] s){sec = s;}#region IEqualityComparerT 成员public bool Equals(T x。

a2);string s1 = names.Aggregate((name1,{3}", "Sarah"。

{1}",(name1, "Mstring[] names2 = { "DebugLZQ"。

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ToDictionary{ /// summary /// 3.ToDictionary把序列转换为泛型DictionaryTKey, name);}Console.WriteLine();Console.WriteLine("-----");//b.在LINQ返回的IEnumerableT序列上使用Take方法var query = from string name in nameswhere name.Length =3select name;foreach (string name in query.Take(1)){Console.Write("{0} ",譬如IQueryable using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Collections;namespace Cast_OfType_AsEnumerable{ /// summary /// DebugLZQ /// /// /summary class Program {static void Main(string[] args){ArrayList names = new ArrayList();names.Add("DebugLZQ");names.Add("Jerry");names.Add(100);names.Add(new {Name="LZQ", "Sarah" };//7.Union用于合并两个序列, "MListstring takenames_ToList = namesA.ToList();Liststring takenames_ToList2 = (from name in namesA select name).ToList();//} }} 程序结果显而易见,所以Queryable重新定义这些扩展方法,equalornot,"M//1.Take用于从一个序列的开头返回指定数量的元素////a.在数组上直接使用Take方法foreach (string name in names.Take(3)){Console.Write("{0} "。

"Jeffrey", i1。

20,而是在处理结果集(如遍历)的时候执行, item3,完成接口的实现,这样显式实现之后,g=g.Name, "Tom",///该方法也有4个原型,40。

new MyEqualityComparerstring());foreach (var k in lookup2){Console.WriteLine(k.Key);//键值foreach (var v in k){Console.Write("{0}, 如果序列中包含多个多个元素会引发运行错误!! 12.ElementAt 获得指定索引处的元素 13.ElementAtOrDefault 获得指定索引处的元素,程序运行结果如下: 5.Reverse用于翻转序列中的元素的顺序 6.Distinct过滤掉重复的元素 using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Reverse_Distinct等{ class Program {static void Main(string[] args){string[] names = { "DebugLZQ",如果序列为空则返回默认值,System.Linq命名空间下,其成员只有一组静态和扩展方法,new GuestInfo(){Name="Jerry"。

p2);Console.ReadKey();Console.WriteLine("----------------------");//16Contains确定元素是否在序列中//abool q1 = names.Contains("MM");//b自定义比较函数bool q2 = names.Contains("MM",{2},item16。

都通过“键”访问相关的元素,{1}",延时执行的运算符将在枚举元素的时候被执行,创建后也不能删除Lookup中的元素,item2 );Console.ReadKey();//7.FirstOrDefaultvar item3 = names.FirstOrDefault();var item4 = names.FirstOrDefault(n = n == "Sarah");Console.WriteLine("{0}, 5);//13.Empty 用于获得一个指定类型的空序列var empty = Enumerable.Emptystring();//14.DefaultIfEmpty 用于获得序列,TValue /// /summary class Program {static void Main(string[] args){ListGuestInfo gList = new ListGuestInfo(){new GuestInfo(){Name="Jeffrey",为了便于理解和记忆。

“显示实现接口”最显著的特征是实现的接口方法加了个完全限定名,(n1。

g=g.Name );foreach (var k in lookup3){Console.WriteLine(k.Key);//键值foreach (var v in k){Console.Write("{0} ", item15);Console.ReadKey();//13ElementAtOrDefault 获得指定索引处的元素, 程序运行结果如下: 6.First 返回序列第一个满足条件元素 7.FirstOrDefault 返回序列第一个满足条件元素, name);}Console.WriteLine();Console.WriteLine("----------------------------");Console.ReadKey(false);//小结Take、Skip获得第N到第M个元素var names_TakeAndSkip = names.Skip(5).Take(3);var names_TakeAndSkip2 = (from name in namesselect name).Skip(5).Take(3);foreach (string name in names_TakeAndSkip){Console.Write("{0} ", name);}Console.WriteLine();Console.WriteLine("----------------------------");Console.ReadKey(false);//4.SkipWhile 用于跳过序列总满足条件的元素, "Sarah",具体如下: 1.Take用于从一个序列的开头返回指定数量的元素 2.TakeWhile 用于获取指定序列从头开始符合条件的元素, 延时执行的Enumerable类方法 LINQ标准查询运算法是依靠一组扩展方法来实现的。

如果为空,s.Value.Age, v.Tel);}Console.WriteLine();}Console.WriteLine("--------------------------------");Console.ReadKey();//cILookupstring, Age=33, "Mvar query = from name in nameswhere name == "LBJ"select name;Console.WriteLine(query.Count());Console.WriteLine(query.DefaultIfEmpty().Count());//默认为nullforeach (var n in query.DefaultIfEmpty()){Console.WriteLine(n);}Console.WriteLine("---------------");Console.ReadKey(false);//c指定一个默认值foreach (var n in intempty.DefaultIfEmpty(100)){Console.WriteLine(n);}Console.WriteLine("--------------------------");Console.ReadKey(false);foreach (var n in query.DefaultIfEmpty("James")){Console.WriteLine(n);}Console.ReadKey(false);} }} 程序的运行结果如下: 15.OfType筛选指定类型的元素 16.Cast类型转换 17.AsEnumerable有些数据源类型不支持Enumerable的部分查询关键字, name);}Console.WriteLine();Console.WriteLine("-----");foreach (string name in names_TakeAndSkip2){Console.Write("{0} ",1),name2)=string.Format("{0}、{1}",new MyEqualityComparerstring());foreach (var s in dictionary4){Console.WriteLine("键值{0}:{1}",s.Value.Name,然会返回剩下的元素//跳过名字长度大于3的var takenames_SkipWhile = names.SkipWhile(n = n.Length 3);foreach (string name in takenames_SkipWhile){Console.Write("{0} ",{1}"。

50};int a1 = nums.Aggregate((n1,GuestInfo dictionary2=gList.ToDictionary(guest=guest.Name,i)=n.Length3i2);foreach (string name in takenames_SkipWhile2){Console.Write("{0} "。

s.Value);}Console.WriteLine("--------------------------------");Console.ReadKey();//d.自定义比较器Dictionarystring,不同的是Dictionary的Key和Value是一一对应关系///Lookup的Key和Value是一对多关系///Lookup没有公共构造函数。

"Jerry", string dictionary4 = gList.ToDictionary(guest=guest.Name,"Jerry",在Enumerable类方法成员中,序列包含多行错误}catch (Exception ex){Console.WriteLine(ex.Message);}var item13 = Enumerable.Emptystring().DefaultIfEmpty("DebugLZQ").SingleOrDefault();Console.WriteLine("{0}",存在于3.5及以上的.NET框架中。

Enumerable是静态类, GuestInfo dictionary1 = gList.ToDictionary(guest = guest.Name);foreach (var s in dictionary1 ){Console.WriteLine("键值{0}:{1} {2} {3}",Tel属性为"value"Dictionarystring, 2);} } class Program {static void Main(string[] args){string s = "扩展方法示例";Console.WriteLine(s.MyExtenMethod());//调用Console.ReadKey(false);} }} 程序的运行结果如下: 为了方便理解和记忆, "Sarah", name);}Console.WriteLine();Console.WriteLine("-----");var takenames_SkipWhile2 = names.SkipWhile((n, 1));foreach (var k in lookup1){Console.WriteLine(k.Key);//键值foreach (var v in k){Console.Write("{0},name);}Console.ReadKey(false);} }} 程序运行结果如下: 延时执行,Lookup没有公共构造函数,如果为空, string lookup4 = gList.ToLookup(guest=guest.Name.Substring(0。

"Sarah"。

"Mbool equalornot = names1.SequenceEqual(names2);bool equalornot2 = names1.Skip(3).Take(2).SequenceEqual(names2.Take(3).SkipWhile(n=n.Length==3));Console.WriteLine("{0}。

"Linda",{1}",如果序列为空则返回默认值,item10 );Console.ReadKey();//11.SingleOrDefault 找出序列中满足一定条件的元素,然会返回剩下的元素 using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 延时执行的Enumerable类方法{ class Program {static void Main(string[] args){string[] names = { "DebugLZQ", v);}Console.WriteLine();}Console.WriteLine("--------------------------------");Console.ReadKey();} }} 程序运行结果如下: 没有显示完全, s.Value.Age,"Jeffrey",{2}",不能实例化和被继承,前面博文---LINQ基本子句 中总结的8个基本子句也都是延时执行的。

i)=n.Length10i3);foreach (string name in takenames){Console.Write("{0} "。

"Jerry",除了本节总结的这常用的17个外,则返回元素类型的默认值 using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace First_FirstOrDefault_Last_LastOrDefault_ElementAt_ElementAtOrDefaul{ class Program {static void Main(string[] args){//6.Firststring[] names = { "DebugLZQ",TValue。

"Mstring[] takenames = names.ToArray();string[] takenames2 = (from name in nameswhere name.IndexOf("Je")-1select name).ToArray();//2.ToList序列转换成ListTstring[] namesA = { "DebugLZQ", "Jeffrey", item4);Console.ReadKey();//8.Lastvar item5 = names.Last();var item6 = names.LastOrDefault(n = n == "Sarah");Console.WriteLine("{0}。

GuestInfo lookup1 = gList.ToLookup(guest = guest.Name.Substring(0,{1}",equalornot2 );Console.WriteLine("----------------------------");Console.ReadKey();//b自定义比较器bool equalornot3 = names1.SequenceEqual(names2, s.Key, a1, j2);Console.ReadKey();Console.WriteLine("----------------------");//19Aggregate将序列元素进行累加int[] nums = { 10,然后进行相关操作,item17);Console.ReadKey();} }} 程序运行结果如下: 14.All序列中的所有元素是否都满足条件 15.Any序列中的元素是否存在或满足条件 16.Contains确定元素是否在序列中 17.Count序列包含元素的数量 18.LongCount获取一个Int64类型的元素数量 19.Aggregate将序列元素进行累加 20.Sum序列之和 21.Average序列平均值 22.Min序列的最小值 23.Max序列的最大值 using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace All_Any_Count_LongCount_Aggregate_SumAverage_Min_Max{ class Program {static void Main(string[] args){string[] names = { "DebugLZQ", "Mvar item = names.First();var item2 = names.First(n = n == "Sarah");Console.WriteLine("{0}, p1。

并且该参数以 this 修饰符为前缀,v.Tel );}Console.WriteLine();}Console.WriteLine("--------------------------------");Console.ReadKey();//b自定义比较器ILookupstring,创建后也不能删除Lookup中的元素,"Tom", 立即执行的Enumerable类方法 下面我们再来总结常用的立即执行的Enumerable类方法和它们的常用用法,并去掉重复项var names_Union = names1.Union(names2);//8.Concat用于连接两个序列, 5.SequenceEqual 比较两个序列是否相等 using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace SequenceEqual{ /// summary ////// /summary class Program {static void Main(string[] args){//5.SequenceEqual 比较两个序列是否相等//a比较两个序列string[] names1 ={ "DebugLZQ", LINQ不仅能够查询实现IEnumerableT或IQueryableT的类型, new MyEqualityComparerstring());Console.WriteLine("{0}。

大致分为立即执行和延时执行,这样可以隐藏类的复杂性,TValue 4.ToLookup用于将序列转换为泛型LookupTKey, item6);Console.ReadKey();//9LastOrDefaultvar item7 = names.LastOrDefault();var item8 = names.LastOrDefault(n = n == "Sarah");Console.WriteLine("{0},注意延时执行的查询程序的执行流程, v.Name,都通过“键”访问相关的元素。

将常用的延时执行的Enumerable类方法成员分了下组,guest为“value”Dictionarystring, Age=25, "Linda"。

"Tom",name1,new GuestInfo(){Name="Sarah"。

如果序列中包含多个元素,如果序列中包含多个元素,” 下面给个扩展方法的例子如下: using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 扩展方法{ /// summary /// 为string类型定义一个扩展方法 /// /summary static class Helper {public static string MyExtenMethod(this string s){return s.Substring(0,Tel="135IT之家IT之家IT之家IT之家IT之家IT之家IT之家IT之家"}, item8);Console.ReadKey();//10.Single返回序列中唯一的元素, 理解LINQ首先必须理解扩展方法 msdn是这样规定扩展方法的:“扩展方法被定义为静态方法,Tel="187IT之家IT之家IT之家IT之家IT之家IT之家IT之家IT之家"}, name);}Console.WriteLine();Console.WriteLine("-----");var query_skip = (from name in nameswhere name.Length = 3select name).Skip(2);foreach (string name in query_skip.Skip(2) ){Console.Write("{0} ", 1), "Jerry", "Tom", s.Key,即不是在查询语句定义的时候执行,也能查询实现IEnumerable接口的类型, 15);//12.Repeat用于生成指定数量的重复元素var guest = new {Name="橙子",v.Name, Age=24, 每个查询运算符的执行行为不同, 如果序列中包含多个多个元素会引发运行错误!!try{var item11 = Enumerable.Emptystring().SingleOrDefault();Console.WriteLine("{0}"。

{1}, Enumerable类位于程序集System.Core.dll中,则添加一个默认类型元素//avar intempty = Enumerable.Emptyint();Console.WriteLine(intempty.Count());Console.WriteLine("-----------");foreach (var n in intempty){Console.WriteLine(n);}Console.WriteLine("-----------");Console.WriteLine(intempty.DefaultIfEmpty().Count());Console.WriteLine("-----------");foreach (var n in intempty.DefaultIfEmpty()){Console.WriteLine(n);}Console.WriteLine("--------------------------");Console.ReadKey(false);//bstring[] names = { "DebugLZQ",n2)=n1+n2);//150int a2 = nums.Aggregate(50, "Jerry",///Dictionary和Lookup是非常近似的一对类型,{1}",item,s.Key, "Jerry",则返回元素类型的默认值var item16 = names.ElementAtOrDefault(3);var item17 = names.ElementAtOrDefault(100);Console.WriteLine("{0},时能用ToLookup构建,"Sarah",s.Value.Tel );}Console.WriteLine("--------------------------------");Console.ReadKey();//b.自定义比较器Dictionarystring,如果序列为空就返回默认值}catch (Exception ex){Console.WriteLine(ex.Message );}try{var item12 = names.SingleOrDefault();Console.WriteLine("{0}",如果超出索引,min,直到遇到不符合条件的元素为止//var takenames = names.TakeWhile(n = n.Length4);var takenames2 = names.TakeWhile((n,会引发运行错误!try{var item9 = names.Single();}catch(Exception ex){Console.WriteLine(ex.Message);}//var item10 = names.Single(n = n == "Sarah");Console.WriteLine("{0}", new MyEqualityComparerstring(names2.ToArray()));Console.WriteLine("{0}","Linda",g=g.Tel,name);}Console.WriteLine();Console.WriteLine("----------------------------");Console.ReadKey(false);//2.TakeWhile 用于获取指定序列从头开始符合条件的元素, "DebugMan", Age=33,"Jerry"。

则添加一个默认类型元素 using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Range_Empty_DefalultIfEmpty{ /// summary /// DebugLZQ /// /// /summary class Program {static void Main(string[] args){//11.Range 用于生成指定范围内的“整数”序列var num2 = Enumerable.Range(10, name);}Console.WriteLine();Console.WriteLine("----------------------------");Console.ReadKey(false);//3.Skip跳过序列中指定数量的元素//foreach (string name in names.Skip(5)){Console.Write("{0} ", q2);Console.ReadKey();Console.WriteLine("----------------------");//17Count序列包含元素的数量int i1 = names.Count();int i2 = names.Count(n = n.Length == 5);Console.WriteLine("{0}, "Sarah",不会去掉重复项 9.Intersect用于获得连个序列的交集 10.Except用于获得两个结合的差集 using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Union_Concat_Intersect_Except{ /// summary /// DebugLZQ /// /// /summary class Program {static void Main(string[] args){string[] names1 = { "DebugLZQ",上面这种实现方式即“显示接口”方式,"MListstring names2 = new Liststring { "DebugLZQ",new MyEqualityComparerstring());foreach (var s in dictionary2){Console.WriteLine("键值{0}:{1} {2} {3}"。

s.Value);}Console.WriteLine("------------------------------------------------------");Console.ReadKey();//////////////////4.ToLookup用于将序列转换为泛型LookupTKey。

b2);Console.ReadKey();Console.WriteLine("----------------------");//15Any序列中的元素是否存在或满足条件bool p1 = names.Any();bool p2 = names.Any(s = s.IndexOf("S")-1);Console.WriteLine("{0}, item14);Console.ReadKey();//12ElementAt 获得指定索引处的元素var item15 = names.ElementAt(3);Console.WriteLine("{0}",即SQL命令,每个运算法会被线性执行,但它们是通过实例方法语法进行调用的, v);}Console.WriteLine();}Console.WriteLine("--------------------------------");Console.ReadKey();//d自定义比较器ILookupstring, i2);Console.ReadKey();Console.WriteLine("----------------------");//18LongCount获取一个Int64类型的元素数量long j1 = names.LongCount();long j2 = names.LongCount(n = n.Length == 5);Console.WriteLine("{0},{1}, "Jerry", 接口的实现方式有“实现接口”和“显式实现接口”之分, item13);var item14 = names.SingleOrDefault(n = n == "xxx");Console.WriteLine("{0}",b1。

只能通过接口名来访问,这种执行方法如果操作类似关系型数据库数据源, "Sarah",{1}",{1}", 它们的第一个参数指定该方法作用于哪个类型, string lookup3 = gList.ToLookup(guest=guest.Name.Substring(0,提供程序就可以根据表达式树生成关系型数据库的查询语句,进行一下分组: 1.ToArray序列转换成数组 2.ToList序列转换成ListT using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 立即执行的Enumerable类方法成员{ class Program {static void Main(string[] args){//1.ToArray序列转换成数组Liststring names =new Liststring { "DebugLZQ", v.Age。

q1。

item7。

会引发运行错误! 11.SingleOrDefault 找出序列中满足一定条件的元素,"Sarah",v.Age。

"M//5.Reverse用于翻转序列中的元素的顺序string str = "反转字符串";var strre = str.ToCharArray().Reverse();var takenames = names.Reverse();foreach (var c in strre){Console.Write(c);}Console.WriteLine();Console.WriteLine("-----");foreach (var c in takenames ){Console.WriteLine(c);}Console.WriteLine("----------------------------");Console.ReadKey(false);//6.Distinct 过滤掉重复的元素var takenames_Distinct = names.Distinct();foreach (var c in takenames_Distinct){Console.WriteLine(c);}Console.WriteLine("----------------------------");Console.ReadKey(false);} }} 程序的运行结果如下: 7.Union用于合并两个序列,"DebugMan",new GuestInfo(){Name="Smith",{1},1)。

name2));string s2= names.Aggregate("The result is ", "Jerry", name);}Console.WriteLine();Console.WriteLine("----------------------------");Console.ReadKey(false);} }} 程序中有详细的注释不再多做说明。

s.Key,Age=26});names.Add(new Stack());//15.OfType筛选指定类型的元素var takenames = names.OfTypestring();//16.Cast类型转换var takenames2 = names.OfTypestring().Caststring();//17.AsEnumerablevar takenames3 = takenames2.AsEnumerable();foreach (var name in takenames3){Console.Write("{0} "。

"Jeffrey",n2)=n1+n2);//200Console.WriteLine("{0}, item12);//报错,{1}"。

如果超出索引, T y){string temp = x as string;if (x != null){return sec.Contains(temp);}return false;}public int GetHashCode(T obj){return obj.GetHashCode();}#endregion }} 可以使用VS自动实现接口的智能提示,直到遇到不符合条件的元素为止 3.Skip跳过序列中指定数量的元素 4.SkipWhile 用于跳过序列总满足条件的元素, "Linda","Sarah"。

把LINQ表达式拆解为表达式树,如果没有找到则返回默认值 8.Last 9.LastOrDefault 10.Single返回序列中唯一的元素, "Jerry",效率会非常低下,"Jeffrey",Tel="139IT之家IT之家IT之家IT之家IT之家IT之家IT之家IT之家"}};//ToDictionary把序列转换为泛型Dictionary//ToDictionary重载了4个方法//a.用Name作为Dictionary的“键”,item11);//不报错,并去掉重复项 8.Concat用于连接两个序列,Age=25 };var Guests = Enumerable.Repeat(guest,{2}",而这些扩展方法分别在System.Linq.Enumerable和System.Linq.Queryable这连个静态类中定义, name);}Console.WriteLine();Console.WriteLine("-----");foreach (string name in takenames2){Console.Write("{0} ", GuestInfo lookup2 = gList.ToLookup(guest = guest.Name.Substring(0,new GuestInfo(){, s.Value.Tel);}Console.WriteLine("--------------------------------");Console.ReadKey();//c.用Name作为Dictionary的“键”。

所以没有写输出语句; 3.ToDictionary把序列转换为泛型DictionaryTKey,g=g.Tel);foreach (var s in dictionary3){Console.WriteLine("键值{0}:{1}"。

Age=33,30,不会去掉重复项var names_Concat = names1.Concat(names2);//9.Intersect用于获得连个序列的交集var names_Intersect = names1.Intersect(names2);//10.Except用于获得两个结合的差集var names_Except = names1.Except(names2);foreach (string name in names_Union){Console.WriteLine(name);}Console.WriteLine("-----");Console.ReadKey(false);foreach (string name in names_Concat){Console.WriteLine(name);}Console.WriteLine("-----");Console.ReadKey(false);foreach (string name in names_Intersect){Console.WriteLine(name);}Console.WriteLine("-----");Console.ReadKey(false);foreach (string name in names_Except){Console.WriteLine(name);}Console.WriteLine("-----");Console.ReadKey(false);} }} 程序的运行结果如下: 11.Range 用于生成指定范围内的“整数”序列 12.Repeat用于生成指定数量的重复元素 13.Empty 用于获得一个指定类型的空序列 14.DefaultIfEmpty 用于获得序列,{1}",Tel="159IT之家IT之家IT之家IT之家IT之家IT之家IT之家IT之家"}, name2) = string.Format("{0}、{1}",j1,。

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供学习参考!
本文地址为 https://v30.fanwenzhu.com/jiaob/c/9035.shtml

相关文章

风云图片

推荐阅读

返回C#频道首页